package main

import (
	"io/ioutil"
	"fmt"
	"os"
	"io"
	"bufio"
)

func check(e error) {
	if e != nil {
		panic(e)
	}
}
func main() {
	srcname := "/home/xiaonu/Desktop/dat.txt"
	dat, err := ioutil.ReadFile(srcname) //返回的是int数组
	check(err)
	fmt.Println(string(dat))   //转成字符串才能看的懂

	f, err := os.Open(srcname) //打开文件
	check(err)
	b1 := make([]byte, 5) //创建空切片数组，只能装5个字节，就是只能一次读5个字母
	n1, err := f.Read(b1) //用这个切片数组从文件开头读到第5个字母
	check(err)
	fmt.Printf("n1:%d,b1:%s\n", n1, string(b1)) //n1是读取到的字节数量，b1是读到的内容存到b1里

	o2,err :=f.Seek(6,0) //从文件开头向后偏移6个开始读,012345没6
	check(err)
	b2:=make([]byte,2) //从上次偏移量向后取2个字母or
	n2,err:=f.Read(b2)
	fmt.Printf("n2:%d,%d,b2:%s\n", n2, o2,string(b2))//n2:2,6,b2:or

	//io包中ReatAtLeast使用，文件读取作用
	o3,err:=f.Seek(6,0) //从文件开头向后读6个字母
	check(err)
	b3:=make([]byte,2)
	n3,err:=io.ReadAtLeast(f,b3,2)
	check(err)
	fmt.Printf("%d bytes @ %d:%s\n",n3,o3,string(b3))

	_,err=f.Seek(0,0)
	check(err)
	r4:=bufio.NewReader(f)
	b4,err:=r4.Peek(7)
	check(err)
	fmt.Printf("5 bytes:%s\n",string(b4))
	f.Close()
}
